<!doctype html>
<html lang="zh-CN">
<head>
  <base href="https://www.nodeapp.cn/tty.html" />
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>TTY | Node.js 中文文档 | Node.js 中文网</title>
  <meta name="description" content="Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型，使其轻量又高效。Node.js 的包管理器 npm，是全球最大的开源库生态系统。">
  <link rel="stylesheet" href="assets/style.css">
  <link rel="stylesheet" href="assets/sh.css">
  <link rel="canonical" href="https://www.nodeapp.cn/tty.html">
  <link rel="apple-touch-icon" href="apple-touch-icon.png">
  <link rel="icon" sizes="32x32" type="image/png" href="favicon.png">
  
  <script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?acdf78480f7f8f2b23b812565a5868e0";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>

</head>
<body class="alt apidoc" id="api-section-tty">
  <div id="content" class="clearfix">
    <div id="column1" data-id="tty" class="interior">
      <header>
        <h1>Node.js v8.x 中文文档</h1>
        <hr>
      </header>

      <div id="toc">
        <h2>目录</h2>
        <ul>
<li><span class="stability_2"><a href="#tty_tty">tty - 终端</a></span><ul>
<li><span class="stability_undefined"><a href="#tty_class_tty_readstream">tty.ReadStream 类</a></span><ul>
<li><span class="stability_undefined"><a href="#tty_readstream_israw">readStream.isRaw</a></span></li>
<li><span class="stability_undefined"><a href="#tty_readstream_istty">readStream.isTTY</a></span></li>
<li><span class="stability_undefined"><a href="#tty_readstream_setrawmode_mode">readStream.setRawMode(mode)</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#tty_class_tty_writestream">tty.WriteStream 类</a></span><ul>
<li><span class="stability_undefined"><a href="#tty_event_resize">&apos;resize&apos; 事件</a></span></li>
<li><span class="stability_undefined"><a href="#tty_writestream_columns">writeStream.columns</a></span></li>
<li><span class="stability_undefined"><a href="#tty_writestream_istty">writeStream.isTTY</a></span></li>
<li><span class="stability_undefined"><a href="#tty_writestream_rows">writeStream.rows</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#tty_tty_isatty_fd">tty.isatty(fd)</a></span></li>
</ul>
</li>
</ul>

      </div>
<div id="apicontent">
        <h1>tty - 终端<span><a class="mark" href="#tty_tty" id="tty_tty">#</a></span></h1>
<!--introduced_in=v0.10.0-->
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">稳定性: 2</a> - 稳定的</div><p><code>tty</code> 模块提供了 <code>tty.ReadStream</code> 类和 <code>tty.WriteStream</code> 类。
使用以下方法引入：</p>
<pre><code class="lang-js">const tty = require(&apos;tty&apos;);
</code></pre>
<p>当 Node.js 检测到正运行在一个文本终端（TTY）时，则 <a href="process.html#process_process_stdin"><code>process.stdin</code></a> 默认会被初始化为一个 <code>tty.ReadStream</code> 实例，且 <a href="process.html#process_process_stdout"><code>process.stdout</code></a> 和 <a href="process.html#process_process_stderr"><code>process.stderr</code></a> 默认会被初始化为一个 <code>tty.WriteStream</code> 实例。
判断 Node.js 是否运行在一个 TTY 上下文的首选方法是检查 <code>process.stdout.isTTY</code> 属性的值是否为 <code>true</code>：</p>
<pre><code class="lang-sh">$ node -p -e &quot;Boolean(process.stdout.isTTY)&quot;
true
$ node -p -e &quot;Boolean(process.stdout.isTTY)&quot; | cat
false
</code></pre>
<p>大多数情况下，应用程序无需手动创建 <code>tty.ReadStream</code> 类和 <code>tty.WriteStream</code> 类的实例。</p>
<h2>tty.ReadStream 类<span><a class="mark" href="#tty_class_tty_readstream" id="tty_class_tty_readstream">#</a></span></h2>
<div class="api_metadata">
<span>新增于: v0.5.8</span>
</div><p><code>tty.ReadStream</code> 类是 <a href="net.html#net_class_net_socket"><code>net.Socket</code></a> 的一个子类，表示 TTY 的可读部分。
正常情况下，<a href="process.html#process_process_stdin"><code>process.stdin</code></a> 是 Node.js 进程中唯一的 <code>tty.ReadStream</code> 实例，无需创建更多的实例。</p>
<h3>readStream.isRaw<span><a class="mark" href="#tty_readstream_israw" id="tty_readstream_israw">#</a></span></h3>
<div class="api_metadata">
<span>新增于: v0.7.7</span>
</div><p>返回 <code>boolean</code> 值。
如果 TTY 被配置成原始模式，则返回 <code>true</code>。
默认为 <code>false</code>。</p>
<h3>readStream.isTTY<span><a class="mark" href="#tty_readstream_istty" id="tty_readstream_istty">#</a></span></h3>
<div class="api_metadata">
<span>新增于: v0.5.8</span>
</div><p>A <code>boolean</code> that is always <code>true</code> for <code>tty.ReadStream</code> instances.</p>
<h3>readStream.setRawMode(mode)<span><a class="mark" href="#tty_readstream_setrawmode_mode" id="tty_readstream_setrawmode_mode">#</a></span></h3>
<div class="api_metadata">
<span>新增于: v0.7.7</span>
</div><p>把 <code>tty.ReadStream</code> 配置成原始模式。</p>
<p>在原始模式中，输入按字符逐个生效，但不包括修饰符。
终端对字符的所有特殊处理会被禁用，包括应答输入的字符。
该模式中 <code>CTRL</code>+<code>C</code> 不再产生 <code>SIGINT</code>。</p>
<ul>
<li><code>mode</code> 
            <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;boolean&gt;</a> 如果为 <code>true</code>，则把 <code>tty.ReadStream</code> 配置成原始模式。
如果为 <code>false</code>，则把 <code>tty.ReadStream</code> 配置成默认模式。
<code>readStream.isRaw</code> 属性会被设为对应的值。</li>
</ul>
<h2>tty.WriteStream 类<span><a class="mark" href="#tty_class_tty_writestream" id="tty_class_tty_writestream">#</a></span></h2>
<div class="api_metadata">
<span>新增于: v0.5.8</span>
</div><p><code>tty.WriteStream</code> 类是 <code>net.Socket</code> 的一个子类，表示 TTY 的可写部分。
正常情况下，<a href="process.html#process_process_stdout"><code>process.stdout</code></a> 和 <a href="process.html#process_process_stderr"><code>process.stderr</code></a> 是 Node.js 进程中唯一的 <code>tty.WriteStream</code> 实例，无需创建更多的实例。</p>
<h3>&apos;resize&apos; 事件<span><a class="mark" href="#tty_event_resize" id="tty_event_resize">#</a></span></h3>
<div class="api_metadata">
<span>新增于: v0.7.7</span>
</div><p>当 <code>writeStream.columns</code> 属性或 <code>writeStream.rows</code> 属性发生变化时触发 <code>&apos;resize&apos;</code> 事件。
监听器回调函数没有参数。</p>
<pre><code class="lang-js">process.stdout.on(&apos;resize&apos;, () =&gt; {
  console.log(&apos;窗口大小发生变化！&apos;);
  console.log(`${process.stdout.columns}x${process.stdout.rows}`);
});
</code></pre>
<h3>writeStream.columns<span><a class="mark" href="#tty_writestream_columns" id="tty_writestream_columns">#</a></span></h3>
<div class="api_metadata">
<span>新增于: v0.7.7</span>
</div><p>返回 <code>number</code> 值，表示 TTY 当前具有的列数。
每当 <code>&apos;resize&apos;</code> 事件被触发时，该属性会被更新。</p>
<h3>writeStream.isTTY<span><a class="mark" href="#tty_writestream_istty" id="tty_writestream_istty">#</a></span></h3>
<div class="api_metadata">
<span>新增于: v0.5.8</span>
</div><p>A <code>boolean</code> that is always <code>true</code>.</p>
<h3>writeStream.rows<span><a class="mark" href="#tty_writestream_rows" id="tty_writestream_rows">#</a></span></h3>
<div class="api_metadata">
<span>新增于: v0.7.7</span>
</div><p>返回 <code>number</code> 值，表示 TTY 当前具有的行数。
每当 <code>&apos;resize&apos;</code> 事件被触发时，该属性会被更新。</p>
<h2>tty.isatty(fd)<span><a class="mark" href="#tty_tty_isatty_fd" id="tty_tty_isatty_fd">#</a></span></h2>
<div class="api_metadata">
<span>新增于: v0.5.8</span>
</div><ul>
<li><code>fd</code> 
            <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 数值类型的文件描述符。</li>
</ul>
<p>如果给定的 <code>fd</code> 有关联 TTY，则返回 <code>true</code>，否则返回 <code>false</code>。</p>

      </div>
    </div>

    <div id="column2" class="interior">
      <div id="intro" class="interior">
        <a href="/" title="Go back to the home page">
          Node.js 中文文档 | Node.js 中文网
        </a>
      </div>
      
        <!-- [start-include:_toc.md] -->
<ul>
<li><a href="documentation.html">关于本文档</a></li>
<li><a href="synopsis.html">用法与例子</a></li>
</ul>
<div class="line"></div>

<ul>
<li><a href="assert.html">断言测试</a></li>
<li><a href="async_hooks.html">异步钩子（Async Hooks）</a></li>
<li><a href="buffer.html">缓存（Buffer）</a></li>
<li><a href="addons.html">C++ 插件</a></li>
<li><a href="n-api.html">C/C++ 插件 - N-API</a></li>
<li><a href="child_process.html">子进程</a></li>
<li><a href="cluster.html">集群（Cluster）</a></li>
<li><a href="cli.html">命令行参数</a></li>
<li><a href="console.html">控制台（Console）</a></li>
<li><a href="crypto.html">加密（Crypto）</a></li>
<li><a href="debugger.html">调试器</a></li>
<li><a href="deprecations.html">废弃的 API</a></li>
<li><a href="dns.html">DNS</a></li>
<li><a href="domain.html">域（Domain）</a></li>
<li><a href="esm.html">ECMAScript 模块</a></li>
<li><a href="errors.html">错误（Errors）</a></li>
<li><a href="events.html">事件（Events）</a></li>
<li><a href="fs.html">文件系统</a></li>
<li><a href="globals.html">全局对象（Globals）</a></li>
<li><a href="http.html">HTTP</a></li>
<li><a href="http2.html">HTTP/2</a></li>
<li><a href="https.html">HTTPS</a></li>
<li><a href="inspector.html">检查工具（Inspector）</a></li>
<li><a href="intl.html">国际化</a></li>
<li><a href="modules.html">模块（Modules）</a></li>
<li><a href="net.html">网络（Net）</a></li>
<li><a href="os.html">操作系统（OS）</a></li>
<li><a href="path.html">路径（Path）</a></li>
<li><a href="perf_hooks.html">性能钩子（Performance Hooks）</a></li>
<li><a href="process.html">进程</a></li>
<li><a href="punycode.html">Punycode</a></li>
<li><a href="querystring.html">查询字符串</a></li>
<li><a href="readline.html">逐行读取</a></li>
<li><a href="repl.html">交互式解释器（REPL）</a></li>
<li><a href="stream.html">流（Stream）</a></li>
<li><a href="string_decoder.html">字符串解码</a></li>
<li><a href="timers.html">定时器（Timers）</a></li>
<li><a href="tls.html">安全传输层（TLS/SSL）</a></li>
<li><a href="tracing.html">事件跟踪（Tracing）</a></li>
<li><a href="tty.html">TTY</a></li>
<li><a href="dgram.html">UDP / 数据报</a></li>
<li><a href="url.html">URL</a></li>
<li><a href="util.html">工具集</a></li>
<li><a href="v8.html">V8</a></li>
<li><a href="vm.html">虚拟机（VM）</a></li>
<li><a href="zlib.html">压缩（ZLIB）</a></li>
</ul>
<div class="line"></div>

<ul>
<li><a href="https://github.com/nodejs/node">GitHub 仓库和问题跟踪</a></li>
<li><a href="https://groups.google.com/group/nodejs">邮件列表</a></li>
</ul>
<!-- [end-include:_toc.md] -->

      
    </div>
  </div>
  <script src="assets/sh_main.js"></script>
  <script src="assets/sh_javascript.min.js"></script>
  <script>highlight(undefined, undefined, 'pre');</script>
</body>
</html>
